package com.bytezreo.block;

/**
 * 
 * @Description   类的成员之四： 代码块（或初始化块）
 * @author Bytezero·zhenglei!        Email:420498246@qq.com
 * @version
 * @date 上午8:56:22
 * @   1.代码块的作用：用来初始化类，对象
 *     2.代码块如果有修饰的话 只能用static
 *     3.分类：静态代码块 vs 非静态代码块
 *     
 *     4.静态代码块
 *        >内部可以有输出语句
 *        >随着类的加载而执行,而且只执行一次
 *        >作用：初始化类的信息
 *        >如果一个类中定义了多个静态代码块，则按着声明的先后顺序执行
 *        >静态代码块的执行要优先于非静态代码块
 *        >静态代码块内只能调用静态的属性，静态的方法，不能调用非静态的结构
 *     
 *     
 *     
 *     5.非静态代码块
 *  	  >内部可以有输出语句
 *   	  >随着对象的创建而执行
 *  	  >每创建一个对象，就执行一次非静态代码块
 *  	  >作用：可以在创建对象时，对对象的属性等进行初始化
 *        >如果一个类中定义多了非静态代码块，则按照声明的先后顺序执行
 *        >非静态代码块内可以调用静态的属性，静态的方法，或非静态的属性，非静态的方法
 *  
 *  
 *  
 *  总结：由父及子   静态先行
 *  
 *  对属性可以赋值的位置：
 *   1.默认初始化
 *   2.显示初始化
 *   3.构造器中初始化
 *   4.有了对象以后，可以通过“对象.属性”或“对象.方法”的方式，进行赋值
 *   5.在代码块中赋值
 *   
 *   
 *  
 */
public class BlockTest {
	public static void main(String[] args) {
		
		String desc = Person.desc;
		System.out.println(desc);
		Person.info();
	
		
		Person p1 = new Person();
		Person p2 = new Person();
		
		System.out.println(p1.age);
	}
	
	
}


class Person
{
	//属性
	String name;
	int age;
	static String desc = "我是一个帅哥！";
	
	//构造器
	public Person()
	{
		
	}
	public Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	
	 
	
	
	//  static 代码块 or 静态代码块
	static
	{
		System.out.println("hello ---1 , static block---静态的属性或方法，随着类的"
				+ "加载而加载");
		
		desc = "我是一个爱学习的人1";
		//调用静态结构
		info();
		
		///不能调用非静态结构
		//eat();
		
	}
	
	static
	{
		System.out.println("hello ---2 , static block---静态的属性或方法，随着类的"
				+ "加载而加载");
	}
	
	//非静态代码块
	{
		System.out.println("hello block ---- 1");
		age = 1;
		
		//调用静态结构
		desc = "我是一个爱学习的人2";
		info();
		//调用非静态结构
		eat();
	}
	
	{
		System.out.println("hello block ---- 2");
		
	}
	
	
	
	
	//方法
	public void eat()
	{
		System.out.println("吃饭");
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	public static void info()
	{
		System.out.println("我是一个大大大大大大的帅哥");
	}
	
	
}